package top.wfzzq.ds;

import top.wfzzq.tds.MyNode;

/**
 * 栈--->先进后出
 * 
 * @author wanghui
 *
 */

public class Mystack<T> {
	// int short long boolean double float byte char
	// Integer
	// Charater

	private MyNode<T> head = null;
	/**
	 * 头节点
	 */
	private int count = 0;
	// 集合元素的数量

	public boolean isEmpty() {
		return count == 0;
	}

	public int size() {
		// 集合的数据量
		return count;
	}

	/**
	 * 查看栈顶元素
	 * 
	 * @return
	 */
	public T peek() {
		if (isEmpty()) {
			throw new RuntimeException("集合为空");
		}
		return head.getData();
	}

	/**
	 * 进栈（添加数据到栈顶）
	 * 
	 * @param data
	 */
	public void push(T data) {
		MyNode<T> node = new MyNode<>(data);
		// 新进节点
		node.setNext(head);
		// 原有的头节点设置为新节点胡next
		count++;
		// 计数+1
		head = node;
		// 将新节点设置为头节点
	}

	/**
	 * 出栈（取出栈顶的数据）
	 * 
	 * @return
	 */
	public T pop() { 
		if (isEmpty()) {
			throw new RuntimeException("集合为空");

		}
		T data = head.getData();
		// 获取头节点数据
		head = head.getNext();
		// 将头节点指next节点
		count--;
		// 计数-1
		return data;
	}

}
